home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1997 December / MACPOWER-1997-12.ISO.7z / MACPOWER-1997-12.ISO / AMUG / PROGRAMMING / Raven 1.2.sit / Raven 1.2 / Source / Foundation / Common / ZUnitTest.cpp < prev    next >
Text File  |  1997-06-21  |  5KB  |  233 lines

  1. /*
  2.  *  File:       ZUnitTest.cpp
  3.  *  Summary:       Singleton that keeps pointers to test functions.
  4.  *  Written by: Jesse Jones
  5.  *
  6.  *  Copyright ゥ 1996-1997 Jesse Jones. 
  7.  *    For conditions of distribution and use, see copyright notice in ZTypes.h  
  8.  *
  9.  *  Change History (most recent first):    
  10.  *
  11.  *         <2>     6/20/97    JDJ        Renamed TUnitTest TUnitTests.
  12.  *         <1>     6/29/96    JDJ        Created
  13.  */
  14.  
  15. #include <ZUnitTest.h>
  16.  
  17. #include <Set.h>
  18.  
  19. #include <ZConstants.h>
  20. #include <ZDebug.h>
  21.  
  22.  
  23. #if DEBUG
  24.     
  25. // ===================================================================================
  26. //    class ZUnitTestSet
  27. // ===================================================================================
  28. class ZUnitTestSet : public set<SUnitTest, less<SUnitTest>, allocator<SUnitTest> > {
  29.  
  30. public:
  31.     ZUnitTestSet() : set<SUnitTest, less<SUnitTest>, allocator<SUnitTest> >() {}
  32. };
  33.  
  34.  
  35. // ===================================================================================
  36. //    class TUnitTests
  37. // ===================================================================================
  38.  
  39. static ZUnitTestSet::iterator sCursor;
  40.  
  41. //----------------------------------------------------------------
  42. //
  43. // TUnitTests::~TUnitTests
  44. //
  45. //----------------------------------------------------------------
  46. TUnitTests::~TUnitTests()
  47. {
  48.     sCursor = mTests->end();
  49.     
  50.     delete mTests;
  51. }
  52.  
  53.  
  54. //----------------------------------------------------------------
  55. //
  56. // TUnitTests::TUnitTests
  57. //
  58. //----------------------------------------------------------------
  59. TUnitTests::TUnitTests()
  60. {
  61.     mTests = new ZUnitTestSet;
  62. }
  63.  
  64.  
  65. //----------------------------------------------------------------
  66. //
  67. // TUnitTests::Instance                                    [static]
  68. //
  69. //----------------------------------------------------------------
  70. TUnitTests* TUnitTests::Instance()
  71. {
  72.     static TUnitTests tester;
  73.     
  74.     return &tester;
  75. }
  76.  
  77.  
  78. //----------------------------------------------------------------
  79. //
  80. // TUnitTests::AddTest
  81. //
  82. //----------------------------------------------------------------
  83. void TUnitTests::AddTest(const string& name, TestProc test)
  84. {
  85.     ASSERT(name.length() != 0);
  86.     ASSERT(mTests->find(name) == mTests->end());
  87.     ASSERT(test != nil);
  88.     
  89.     mTests->insert(SUnitTest(name, test));
  90. }
  91.  
  92.  
  93. //----------------------------------------------------------------
  94. //
  95. // TUnitTests::IsTest
  96. //
  97. //----------------------------------------------------------------
  98. bool TUnitTests::IsTest(const string& name) const
  99. {
  100.     ZUnitTestSet::iterator iter = mTests->find(name);
  101.     
  102.     return iter != mTests->end();
  103. }
  104.  
  105.  
  106. //----------------------------------------------------------------
  107. //
  108. // TUnitTests::GetCount
  109. //
  110. //----------------------------------------------------------------
  111. ulong TUnitTests::GetCount() const
  112. {
  113.     return mTests->size();
  114. }
  115.  
  116.  
  117. //----------------------------------------------------------------
  118. //
  119. // TUnitTests::ResetCursor
  120. //
  121. //----------------------------------------------------------------
  122. void TUnitTests::ResetCursor()
  123. {
  124.     sCursor = mTests->begin();
  125. }
  126.  
  127.  
  128. //----------------------------------------------------------------
  129. //
  130. // TUnitTests::GetNextTest
  131. //
  132. //----------------------------------------------------------------
  133. SUnitTest TUnitTests::GetNextTest()
  134. {
  135.     const SUnitTest& entry = *sCursor++;
  136.  
  137.     return entry;
  138. }
  139.  
  140.  
  141. //----------------------------------------------------------------
  142. //
  143. // TUnitTests::CursorAtEnd
  144. //
  145. //----------------------------------------------------------------
  146. bool TUnitTests::CursorAtEnd() const
  147. {
  148.     return sCursor == mTests->end();
  149. }
  150.  
  151.  
  152. //----------------------------------------------------------------
  153. //
  154. // TUnitTests::DoTest
  155. //
  156. //----------------------------------------------------------------
  157. void TUnitTests::DoTest(const string& name)
  158. {
  159.     bool oldIntense = gIntenseDebugging;
  160.     gIntenseDebugging = true;
  161.     
  162.     try {
  163.         ZUnitTestSet::iterator iter = mTests->find(name);
  164.         ASSERT(iter != mTests->end());
  165.         
  166.         const SUnitTest& entry = *iter;
  167.         
  168.         TestProc test = entry.test;
  169.         
  170.         (*test)();
  171.         
  172.     } catch (...) {
  173.         DEBUGSTR("Caught an exception in TUnitTests::DoTests!");
  174.     }
  175.  
  176.     gIntenseDebugging = oldIntense;
  177. }
  178.  
  179.  
  180. //----------------------------------------------------------------
  181. //
  182. // TUnitTests::DoAllTests
  183. //
  184. //----------------------------------------------------------------
  185. void TUnitTests::DoAllTests()
  186. {
  187.     bool oldIntense = gIntenseDebugging;
  188.     gIntenseDebugging = true;
  189.     
  190.     try {
  191.         ZUnitTestSet::iterator iter = mTests->begin();
  192.         while (iter != mTests->end()) {    
  193.             const SUnitTest& entry = *iter++;
  194.             
  195.             TestProc test = entry.test;
  196.             
  197.             (*test)();
  198.         }
  199.         
  200.     } catch (...) {
  201.         DEBUGSTR("Caught an exception in TUnitTests::DoAllTests!");
  202.     }
  203.  
  204.     gIntenseDebugging = oldIntense;
  205. }
  206.  
  207. #pragma mark -
  208.  
  209. // ===================================================================================
  210. //    class TUnitTestRegistrar
  211. // ===================================================================================
  212.  
  213. //----------------------------------------------------------------
  214. //
  215. // TUnitTestRegistrar::~TUnitTestRegistrar
  216. //
  217. //----------------------------------------------------------------
  218. TUnitTestRegistrar::~TUnitTestRegistrar()
  219. {
  220. }
  221.  
  222.  
  223. //----------------------------------------------------------------
  224. //
  225. // TUnitTestRegistrar::TUnitTestRegistrar
  226. //
  227. //----------------------------------------------------------------
  228. TUnitTestRegistrar::TUnitTestRegistrar(const string& name, TestProc test)
  229. {
  230.     TUnitTests::Instance()->AddTest(name, test);
  231. }
  232.  
  233. #endif    // DEBUG